﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Text.RegularExpressions;

namespace supervisor_de_cajas.Mantenedores
{
    public partial class Promocion : Form
    {
        public Promocion()
        {
            InitializeComponent();
        }
        Conexion conn = new Conexion();
        Gestion g = new Gestion();
        public void llenarComboboxtipoPromo (ComboBox combo)
        {
            DataSet ds = new Gestion().buscarCombomoxTipoPromo(); ;
            if (ds.Tables[0].Rows.Count > 0)
            {
                for (int i = 0; i < ds.Tables["tipo_promocion"].Rows.Count; i++)
                {
                    combo.Items.Add(ds.Tables["tipo_promocion"].Rows[i][0].ToString());
                }
            }
        }
        private void Promocion_Load(object sender, EventArgs e)
        {
            labelsesion.Text = g.recuperarNombreSesion(login.sesion) + " " + g.recuperarApellidoSesion(login.sesion);
            llenarComboboxtipoPromo(cbtipopromo);
            listar();
            btNuevo.Enabled = false;
            cbFiltro.SelectedIndex = 0;
            //listar();
            timer1.Start();
            btNuevo.Enabled = false;
            cbtipopromo.SelectedIndex = 0;
        }
        private void listar()
        {
            dgv1.DataSource = g.getPromociones();
            dgv1.DataMember = "PROMO";
        }
        private void insertar()
        {
            //string rutcompleto = txtrut.Text + txtdigito.Text;
            try
            {
                conn.conectar();
                SqlCommand cmd = new SqlCommand("Promocion_Insert", conn.conector);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@porcentaje_dscto", SqlDbType.VarChar, 50).Value = txtporcentaje.Text;
                cmd.Parameters.Add("@idtipo_promo", SqlDbType.VarChar, 50).Value = txtidcbpromo.Text;
                cmd.Parameters.Add("@estado", SqlDbType.VarChar, 50).Value = txtestado.Text;
                cmd.Parameters.Add("@descripcion", SqlDbType.VarChar, 150).Value = txtdescripcion.Text;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Promoción registrada con exito.!", "Exito", MessageBoxButtons.OK, MessageBoxIcon.Information);
                cbtipopromo.SelectedIndex = 0;
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion ala Base de datos." + ex.Message);
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }
        private void modificar()
        {
           // string rutcompleto = txtrut.Text + txtdigito.Text;
            try
            {

                conn.conectar();
                SqlCommand cmd = new SqlCommand("Promocion_Update", conn.conector);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@idpromo", SqlDbType.Int).Value = txtid.Text;
                cmd.Parameters.Add("@porcentaje_dscto", SqlDbType.Int).Value = txtporcentaje.Text;
                cmd.Parameters.Add("@idtipo_promo", SqlDbType.Int).Value = txtidcbpromo.Text;
                cmd.Parameters.Add("@estado", SqlDbType.VarChar, 50).Value = txtestado.Text;
                cmd.Parameters.Add("@descripcion", SqlDbType.VarChar, 50).Value = txtdescripcion.Text;
                cmd.ExecuteNonQuery();
                MessageBox.Show("Los datos han sido actualizados.!", "Éxito", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Error en la conexion ala Base de datos." + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                string a = ex.Message;
            }
            finally
            {
                conn.desconectar();
            }
        }

        private void cbtipopromo_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtidcbpromo.Text = Convert.ToString(g.RecuperarIdpromo(cbtipopromo.Text));
        }

        private void btregistrar_Click(object sender, EventArgs e)
        {
            if (btregistrar.Text.Equals("Registrar"))
            {
                if (txtdescripcion.Text == "" || txtporcentaje.Text == "" )
                {
                    MessageBox.Show("Debe completar todos los datos.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    if (txtidcbpromo.Text == "0" || txtidcbpromo.Text == "")
                    {
                        MessageBox.Show("Faltan datos obligatorios.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    else
                    {
                        if (g.ExistePromocion(txtdescripcion.Text,txtporcentaje.Text,cbtipopromo.Text) == true)
                        {
                            MessageBox.Show("La promoción ingresada ya existe en la base de datos", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            g.Limpiar(groupBox1);
                            txtdescripcion.Focus();
                            cbtipopromo.SelectedIndex = 0;
                        }
                        else
                        {
                            insertar();
                            g.Limpiar(groupBox1);
                            //inicializarValores();
                        }
                    }
                }
            }
            if (btregistrar.Text.Equals("Guardar"))
            {
                if (txtid.Text == "")
                {
                    MessageBox.Show("Debe seleccionar una fila.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    if (txtidcbpromo.Text == "0" || txtidcbpromo.Text == "" || txtdescripcion.Text=="" || txtporcentaje.Text=="")
                    {
                        MessageBox.Show("Faltan datos obligatorios.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                    else
                    {

                        if (txtid.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[0].Value.ToString() &&
            txtdescripcion.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[1].Value.ToString() &&
            cbtipopromo.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[3].Value.ToString() &&
            txtporcentaje.Text == dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[2].Value.ToString())
                        {
                            MessageBox.Show("No se han realizado cambios.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            btregistrar.Text = "Registrar";
                            g.Limpiar(groupBox1);
                            // txtdigito.Visible = true;
                            // txtrut.ReadOnly = false;
                            txtdescripcion.Focus();
                            btNuevo.Enabled = false;
                            txtid.Text = "";
                            cbtipopromo.Items.Clear();
                            //cbsexo.Items.Clear();
                            cbtipopromo.Items.Add("Elija");
                            //cbsexo.Items.Add("Elija");
                            llenarComboboxtipoPromo(cbtipopromo);
                            //llenarComboboxSexo(cbsexo);
                            cbtipopromo.SelectedIndex = 0;
                            
                        }
                        else
                        {
                            modificar();
                            btregistrar.Text = "Registrar";
                            g.Limpiar(groupBox1);
                            // txtdigito.Visible = true;
                            // txtrut.ReadOnly = false;
                            txtdescripcion.Focus();
                            btNuevo.Enabled = false;
                            txtid.Text = "";
                            cbtipopromo.Items.Clear();
                            //cbsexo.Items.Clear();
                            cbtipopromo.Items.Add("Elija");
                            //cbsexo.Items.Add("Elija");
                            llenarComboboxtipoPromo(cbtipopromo);
                            //llenarComboboxSexo(cbsexo);
                            cbtipopromo.SelectedIndex = 0;
                            //cbgrupoet.SelectedIndex = 0;
                            //txtacum.Text = "0";
                            //txttipocliente.Text = "Normal";
                        }
                    }
                }
            }
            listar();
        }

        private void dgv1_Click(object sender, EventArgs e)
        {
            btNuevo.Enabled = true;
            txtid.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[0].Value.ToString();
            txtdescripcion.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[1].Value.ToString();
            cbtipopromo.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[3].Value.ToString();
            txtporcentaje.Text = dgv1.Rows[dgv1.CurrentCell.RowIndex].Cells[2].Value.ToString();
            
            /*if (estado.Equals("Activo"))
                 chkactivo.Checked = true;
             else
                 chkinactivo.Checked = true;*/

            btregistrar.Text = "Guardar";
        }

        private void btNuevo_Click(object sender, EventArgs e)
        {
            btNuevo.Enabled = false;
            
            txtdescripcion.Focus();
            g.Limpiar(groupBox1);
            btregistrar.Text = "Registrar";
            txtdescripcion.Focus();
            cbtipopromo.SelectedIndex = 0;

            txtid.Text = "";
            txtidcbpromo.Text = "";
            
        }

        private void bteliminar_Click(object sender, EventArgs e)
        {
            if (dgv1.SelectedRows.Count == 0)
            {
                MessageBox.Show("Debe seleccionar una o varias filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                int reg = 0;
                int n = 0;
                for (int i = 0; i < dgv1.RowCount; i++)
                {

                    if (dgv1.Rows[i].Selected == true)
                    {
                        //Codigo y mas codigo
                       
                            int codigo;
                            int.TryParse(dgv1[0, i].Value.ToString(), out codigo);
                            g.eliminarPromocion(codigo);
                            txtid.Text = "";
                            n = n + 1;
                        

                    }
                }
                /*if (n >= 1)
                {
                    MessageBox.Show("Nº de registros Eliminados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if (n == 0)
                {
                    MessageBox.Show("No se han realizado cambios.\nNº de registros Eliminados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }*/
                listar();
                g.Limpiar(groupBox1);
                btregistrar.Text = "Registrar";
                btNuevo.Enabled = false;
                cbtipopromo.SelectedIndex = 0;
               // inicializarValores();
                
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {

            if (dgv1.SelectedRows.Count == 0)
            {
                MessageBox.Show("Debe seleccionar una o varias filas.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                int reg = 0;
                int n = 0;
                for (int i = 0; i < dgv1.RowCount; i++)
                {

                    if (dgv1.Rows[i].Selected == true)
                    {
                        //Codigo y mas codigo
                       
                            int codigo;
                            int.TryParse(dgv1[0, i].Value.ToString(), out codigo);
                            g.ActivarPromocion(codigo);
                            txtid.Text = "";
                            n = n + 1;
                        
                    }
                }
                /*if (n >= 1)
                {
                    MessageBox.Show("Nº de registros Activados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if (n == 0)
                {
                    MessageBox.Show("No se han realizado cambios.\nNº de registros Activados: " + n, "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }*/
                listar();
                g.Limpiar(groupBox1);
                btregistrar.Text = "Registrar";
                btNuevo.Enabled = false;
                cbtipopromo.SelectedIndex = 0;
                
            }
        }

        private void cbFiltro_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbFiltro.Text == "Todos")
            {
                txtbusqueda.Enabled = false;
                listar();
            }
            else
            {
                txtbusqueda.Enabled = true;
                txtbusqueda.Text = "";
                if (cbFiltro.Text == "promocion.descripcion")
                {
                    txtbusqueda.MaxLength = 100;
                }
                if (cbFiltro.Text == "tipo_promocion.descripcion")
                {
                    txtbusqueda.MaxLength = 50;
                }
                if (cbFiltro.Text == "porcentaje_dscto")
                {
                    txtbusqueda.MaxLength = 20;
                }
                
                if (cbFiltro.Text == "Activos")
                {
                    txtbusqueda.Enabled = false;
                    dgv1.DataSource = g.getPromosActivos();
                    dgv1.DataMember = "Promo";
                }
                if (cbFiltro.Text == "Inactivos")
                {
                    txtbusqueda.Enabled = false;
                    dgv1.DataSource = g.getPromosInActivos();
                    dgv1.DataMember = "Promo";
                }

            }
        }

        private void txtbusqueda_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (cbFiltro.Text == "promocion.descripcion" || cbFiltro.Text == "tipo_promocion.descripcion")
            {
                if (Char.IsLetter(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsControl(e.KeyChar))
                {
                    e.Handled = false;
                }
                else if (Char.IsSeparator(e.KeyChar))
                {
                    e.Handled = false;
                }
                else
                {
                    e.Handled = true;
                }
            }
            else
            {
                if (cbFiltro.Text == "porcentaje_dscto")
                {
                    if (Char.IsDigit(e.KeyChar))
                    {
                        e.Handled = false;
                    }
                    else
                        if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                        {
                            e.Handled = false;
                        }
                        else
                        {
                            //el resto de teclas pulsadas se desactivan 
                            e.Handled = true;
                        }
                }
            }
        }

        private void txtbusqueda_TextChanged(object sender, EventArgs e)
        {
            if (cbFiltro.Text == "Todos")
            {
                listar();
            }
            else
            {
                dgv1.DataSource = g.verPromoFiltro(" WHERE " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%' OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%'OR " + cbFiltro.Text + " LIKE '%" + txtbusqueda.Text + "%'");
                dgv1.DataMember = "PROMOCION";
            }
        }

        private void txtdescripcion_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsLetter(e.KeyChar) && !char.IsControl(e.KeyChar) && !char.IsSeparator(e.KeyChar) && !char.IsDigit(e.KeyChar)) { e.Handled = true; } else { e.Handled = false; }
        }

        private void txtporcentaje_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar))
            {
                e.Handled = false;
            }
            else
                if (Char.IsControl(e.KeyChar)) //permitir teclas de control como retroceso 
                {
                    e.Handled = false;
                }
                else
                {
                    //el resto de teclas pulsadas se desactivan 
                    e.Handled = true;
                }
        }

        private void txtdescripcion_Validating(object sender, CancelEventArgs e)
        {
            txtdescripcion.Text = Regex.Replace(txtdescripcion.Text.Trim(), @"\s+", " ");
        }

        private void txtporcentaje_Validating(object sender, CancelEventArgs e)
        {
            txtporcentaje.Text = Regex.Replace(txtporcentaje.Text.Trim(), @"\s+", " ");
            if (txtporcentaje.Text == "") { }
            else
            {
                int porc;
                porc = Convert.ToInt32(txtporcentaje.Text);

                //porc = int.Parse(txtporcentaje.Text);
                if (porc > 100)
                {
                    MessageBox.Show("El porcentaje de descuento no puede exceder al 100%.", "Información", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtporcentaje.Text = "";
                }
            }
        }

        private void txtporcentaje_Click(object sender, EventArgs e)
        {

           
        }

        private void txtporcentaje_TextChanged(object sender, EventArgs e)
        {
            
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            reloj.Text = DateTime.Now.ToLongTimeString();
        }









    }
}
